package com.supsi.segretaria.server;

import java.util.ArrayList;
import java.util.List;

/**
 * Gestisce la lista degli utenti collegati e la communicazione tra di loro
 * User: ognjen
 * Date: 20.04.12
 */
public class MailSystem {
    private static MailSystem instance = null;
    private List<UserContainer> activeUsers;

    /**
     * Costruttore privato
     */
    private MailSystem() {
        activeUsers = new ArrayList<UserContainer>();
    }

    /**
     * Classe MailSystem e' stata realizzata come singleton e questo metodo torna l'instanza
     */
    public static MailSystem getMailSystem() {
        if (instance == null) {
            instance = new MailSystem();
        }
        return instance;
    }

    /**
     * Crea nuovo UserContaner e lo mette nella lista degli utenti attivi
     * @param username
     * @return
     */
    public UserContainer userConnected(String username) {
        UserContainer user = new UserContainer(username);
        activeUsers.add(user);
        return user;
    }

    /**
     * Utente si e' disconnesso
     * @param user
     */
    public void userDisconnected(UserContainer user) {
        activeUsers.remove(user);
    }

    /**
     * Controlla se utente a cui e' destinato il messaggio e' attualmente collegato.
     * Se si, verra' avvisato.
     * @param userTo
     */
    public void notifyNewMessage(String userTo) {
        for(UserContainer uc : activeUsers) {
            if(uc.getUsername().equals(userTo)) {
                uc.newMesssageArrived();
            }
        }

    }

}
